home *** CD-ROM | disk | FTP | other *** search
Text File | 1987-10-01 | 22.3 KB | 1,021 lines |
-
- section ax,code_c
- opt c-,d+,w-,o+
-
- include 'df2:insert/custom registers'
-
- badd=(320*256)/8
-
- move.l #scrolltext,shag
- lea $dff000,a6
- move.w #$87e0,dmacon(a6)
- jsr cop_init
- move.l $6c,oldirq
- move.l #newirq,$6c
- mse:
- cmp.b #$70,$dff006
- bne mse
- cmpi.b #1,start
- bne zog
- move.w #$0fff,$dff180
- jsr bpmusic
- addi.l #1,countd
- move.w #$088f,$dff180
- cmpi.l #4000,countd
- bne zog
- move.l #0,countd
- move.b #0,start
- move.w #$0f,$dff096
- zog:
- btst #6,$bfe001
- bne mse
- move.l oldirq,$6c
- move.l copaddr,a0
- move.l oldcop,(a0)
- move.w #$0f,$dff096
- nolib:
- rts
- newirq:
- movem.l d0-d7/a0-a6,$75000
- cmpi.b #1,start
- bne duggy
- move.b #0,flash
- jmp shau
- duggy:
- cmpi.b #0,fast
- bne stugz
- addi.b #1,county
- cmpi.b #19,county
- bne shau2
- clr.b county
- cmpi.b #1,wait
- bne shau1
- addi.b #1,countg
- cmpi.b #6,countg
- bne shau
- move.b #0,wait
- move.b #0,countg
- shau1:
- cmpi.b #1,goob
- bne stug
- move.b #0,flash
- move.b #0,goob
- jsr prcurse
- jmp stug
- stugz: jsr printy1
- jsr printy1
- jsr printy1
- jsr printy1
- jsr printy1
- jsr printy1
- jsr printy1
- jsr printy1
- jsr printy1
- stug:
- jsr printy1
- shau: move.l asd1+2,a2
- move.l a2,gh1+4
- move.l a2,gh2+4
- jsr prcurse
- shau2:
- movem.l $75000,d0-d7/a0-a6
- dc.w $4ef9
-
- oldirq: dc.l 0
- countd: dc.l 0
-
- even
-
- cop_init:
- lea screen,a0
- move.l a0,d0
- move.w d0,lo1
- swap d0
- move.w d0,hi1
-
- lea screen+9000,a0
- move.l a0,d0
- move.w d0,alo1
- swap d0
- move.w d0,ahi1
-
- moveq #$00,d0
- lea grafname,a1
- move.l $4,a6
- jsr -132(A6)
- move.l $4,A6
- jsr -408(a6)
- tst d0
- beq nolib
- move.l d0,grafbase
- move.l d0,a6
- add.l #$32,d0
- move.l d0,a0
- move.l a0,copaddr
- move.l (a0),oldcop
- move.l #newcop,(a0)
- rts
-
- even
-
- grafname: dc.b "graphics.library",0
- grafbase: dc.l 0
- oldcop: dc.l 0
- copaddr: dc.l 0
- count: dc.b 0
- flash: dc.b 0
- county: dc.b 0
- shag: dc.l 0
- yaz: dc.b 0
- countit: dc.b 0
- gitk: dc.b 0
- wait: dc.b 0
- countg: dc.b 0
- goob: dc.b 0
- fast: dc.b 0
- inv: dc.b 0
- clrc: dc.w 0
- frew: dc.l 0
- start: dc.b 0
- even
-
- newcop: dc.w $0100,$1200
- dc.w $0102
- boh: dc.w $0088
- dc.w $0120
- sp1l: dc.w $0000,$0122
- sp1h: dc.w $0000
- dc.w $0124
- sp2l: dc.w $0000,$0126
- sp2h: dc.w $0000
- dc.w $0128
- sp3l: dc.w $0000,$012a
- sp3h: dc.w $0000
- dc.w $012c
- sp4l: dc.w $0000,$012e
- sp4h: dc.w $0000
- dc.w $0130
- sp5l: dc.w $0000,$132
- sp5h: dc.w $0000
- dc.w $0180,$88f
- dc.w $2001,$fffe
- dc.w $00e0
- ahi1: dc.w $0000
- dc.w $00e2
- alo1: dc.w $0000
- scr: dc.w $3701,$fffe
- dc.w $00e0
- hi1: dc.w $0000
- dc.w $00e2
- lo1: dc.w $0000
- dc.w $008e,$3021
- dc.w $0090,$30f1
- dc.w $0092,$0030
- dc.w $0094,$00c8
- dc.w $180,$88f
- dc.w $182
- fds: dc.w $44a,$184,$fdb,$186,$db9
- dc.w $188,$c97,$18a,$a75,$18c,$853,$18e,$033,$190,$c60
- dc.w $192,$ba5,$194,$962,$196,$530,$198,$db4,$19a,$558
- dc.w $19c,$447,$19e,$336,$1a0,$a40,$1a2,$f44,$1a4,$b00
- dc.w $1a6,$222,$1a8,$333,$1aa,$444,$1ac,$555,$1ae,$666
- dc.w $1b0,$777,$1b2,$888,$1b4,$999,$1b6,$aaa,$1b8,$ccc
- dc.w $1ba,$ddd,$1bc,$eee,$1be,$fff
- dc.w $ff01,$fffe
- dc.w $0182,$088f
- dc.w $ffff,$fffe
-
- even
-
- screen:
- dcb.b badd,255
-
- prcurse:
- cmpi.b #1,fast
- bne hugs
- jmp gh2
- hugs:
- cmpi.b #1,flash
- bne gh2
- gh1: move.b #0,screen
- jmp bast
- gh2: move.b #255,screen
- bast:
- move.l gh1+4,a3
- adda.l #40,a3
- move.l a3,gh1+4
- move.l gh2+4,a3
- adda.l #40,a3
- move.l a3,gh2+4
- addi.b #1,count
- cmpi.b #8,count
- bne prcurse
- move.b #0,count
- cmpi.b #0,flash
- bne shitz
- move.b #1,flash
- jmp ende
- shitz: move.b #0,flash
- ende:
- rts
-
- printy1:
- move.l shag,a2
- move.b (a2)+,yaz
- move.l a2,shag
- cmpi.b #0,yaz
- bne juha
- move.l #scrolltext,shag
- rts
-
- juha:
- cmpi.b #9,yaz
- bne juhb
- move.w #0,fds
- rts
- juhb:
- cmpi.b #10,yaz
- bne juhc
- move.w #$fff,fds
- rts
-
- juhc:
- cmpi.b #11,yaz
- bne juh
- move.w #$44a,fds
- rts
-
- juh:
- cmpi.b #1,yaz
- bne juh1
- move.l asd1+2,a2
- move.l a2,gh1+4
- move.l a2,gh2+4
- move.b #0,flash
- jsr prcurse
- move.b #1,goob
- move.b gitk,d3
- move.l asd1+2,a2
- adda.l #320,a2
- suba.l d3,a2
- move.l a2,asd1+2
- move.b #0,gitk
- rts
- juh1:
- cmpi.b #2,yaz
- bne juh2
- move.b #1,wait
- rts
- juh2:
- cmpi.b #3,yaz
- bne juh3
- move.b #1,fast
- rts
- juh3:
- cmpi.b #4,yaz
- bne juh4
- move.b #0,fast
- rts
- juh4:
- cmpi.b #5,yaz
- bne juh5
- move.b #1,inv
- rts
- juh5:
- cmpi.b #6,yaz
- bne juh6
- move.b #0,inv
- rts
- juh6:
- cmpi.b #7,yaz
- bne juh7
- looper: move.b #255,screen+7999
- addi.w #1,clrc
- move.l looper+4,a3
- suba.l #1,a3
- move.l a3,looper+4
- cmpi.w #8000,clrc
- bne looper
- move.w #0,clrc
- move.l #screen+7999,looper+4
- move.l #screen,asd1+2
- move.l #screen,gh1+4
- move.l #screen,gh2+4
- rts
- juh7:
- cmpi.b #8,yaz
- bne juh9
- groop:
- addi.l #1,frew
- cmpi.l #400000,frew
- bne groop
- clr.l frew
- rts
-
- juh9:
- cmpi.b #12,yaz
- bne juh10
- move.b #1,start
- jsr bpinit
- rts
- juh10:
- move.l #Ascii,a3
- move.l #pos,a4
- move.b (a3)+,d3
- move.w (a4),(a4)
- cmpr1:
- cmp.b yaz,d3
- beq printit1
- move.b (a3)+,d3
- move.w (a4),(a4)+
- jmp cmpr1
- rts
-
- printit1:
- move.l #chrset,a5
- adda.w (a4),a5
- move.l a5,as11+2
- as11: move.b chrset,d0
- cmpi.b #1,inv
- bne asd1
- not d0
- asd1: move.b d0,screen
- loop1: move.l as11+2,a3
- adda.l #40,a3
- move.l a3,as11+2
- move.l asd1+2,a3
- adda.l #40,a3
- move.l a3,asd1+2
- addi.b #1,countit
- cmpi.b #8,countit
- bne as11
- move.b #0,countit
- move.l #chrset,as11+2
- move.l asd1+2,a4
- suba.l #320,a4
- adda.l #1,a4
- addi.b #1,gitk
- cmpi.b #40,gitk
- bne stij
- move.b #0,gitk
- suba.l #40,a4
- add.l #320,a4
- stij:
- move.l a4,asd1+2
- rts
-
-
- even
-
- Ascii:
- dc.b ' 1234567890.-@~,/+*()=%$#":;'
- dc.b 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!?<>'
- dc.b 0
-
- even
-
- pos:
- dc.w 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
- dc.w 21,22,23,24,25,26,27
- dc.w 320,321,322,323,324,325,326,327,328,329,330
- dc.w 331,332,333,334,335,336,337,338,339,340,341
- dc.w 342,343,344,345,346,347,348,349
-
- even
-
- scrolltext:
-
- DC.B 3,' '
- DC.B 3,2,' **** COMMADORE 64 BYTES FREE **** '
- DC.B 3,2,' '
- DC.B 3,2,' 64K RAM SYSTEM 38911 BASIC BYTES FREE '
- DC.B 3,2,' '
- DC.B 2,' '
- DC.B 2,'READY',1,2,4,4,4
- dc.b 2,'LOAD "$",8',2,3,1
- dc.b 'LOADING',8,1
- dc.b 'READY.',1,2,4,4,4
- dc.b 'LIST',2,3,1,5
- dc.b '0 "HOT STUFF" 1988 ',6,1
- dc.b '122 "CONVERTER" PRG ',1
- dc.b '50 "KOALA PAD" PRG ',1
- dc.b '28 "SPRITES" PRG ',1
- dc.b '0 "AX IN 1990" AX! ',1
- dc.b '17 "POD IN 1990" POD ',1
- dc.b '28 "INNER CITY 1990" INC ',1
- dc.b '90 "GREETINGS " GRE ',1
- dc.b '0 "****************" DEL ',1
- dc.b '0 "* *" DEL ',1
- dc.b '0 "* PRODUCED *" DEL ',1
- dc.b '0 "*FOR INNER CITY*" DEL ',1
- dc.b '0 "* BY *" DEL ',1
- dc.b '0 "* AX *" DEL ',1
- dc.b '0 "* *" DEL ',1
- dc.b '0 "****************" DEL ',1
- dc.b '329 BLOCKS FREE ',3,1
- dc.b 'READY.',1,4
- dc.b '',2,2,2,2,2,4,4,7
- dc.b 'LOAD "AX*",8,1',2,3,1
- dc.b 'LOADING',8,1
- dc.b 'READY.',1,4,4,4,4,4,4
- dc.b 'LIST',2,3,1
- DC.B '10 PRINT"HELLO THIS IS POD OF INNER CITY ERE WITH A"',2,1
- dc.b '20 PRINT " NEW INTRO CODER BY AX"',2,10
- dc.b 'READY.',1,4,4,4,4,4,4,4,4,4,4
- dc.b 'RUN',2,3,1
- dc.b 7,'HELLO THIS IS POD OF INNER CITY ERE WITH A ',1
- dc.b ' NEW INTRO CODER BY AX',1
- dc.b 1
- dc.b 'READY.',1,4,4,4,4,4,4,4,4
- dc.b 2
- dc.b 'POKE 53281,0',3,1,9,4,4,4,4,4,4,4
- dc.b 2,'POKE 53281,1',3,1,10,4,4,4,4,4,4,4,2
- dc.b 'POKE 53281,6',3,1,11,4,4,4,4,4,4,2,2
- dc.b 7
- dc.b 'LOAD "$",8',2,3,1
- dc.b 'LOADING',8,1
- dc.b 'READY.',1,2,4,4,4
- dc.b 'LIST',2,3,1,5
- dc.b '0 "MUSIC DISK" 1989 ',6,1
- dc.b '1 "COMMANDO HI PLAY" PRG ',1
- dc.b '16 "COMMANDO HI MUS" PRG ',1
- dc.b '1 "CRAZYCOMETS PLAY" PRG ',1
- dc.b '30 "CRAZYCOMETS MUS" PRG ',1
- dc.b '1 "GREEN BERET PLAY" PRG ',1
- dc.b '31 "GREEN BERET MUS" PRG ',1
- dc.b '584 BLOCKS FREE ',3,1
- dc.b 'READY.',1,4,4,4,4,4,2
- dc.b 'LOAD "COMMANDO HI PLAY",8,1',2,3,1
- dc.b 'LOADING',8,1
- dc.b 'READY.',1,4,4,4,2
- dc.b 'LOAD "COMMANDO HI MUS",8,1',2,3,1
- dc.b 'LOADING',8,8,1
- dc.b 'READY.',1,4,4,4,4,4,7,2
- dc.b 'SYS 49152',2,3,1,4,4,4,4,4,4,4,4,12
- dc.b 3,7,1
- dc.b 'READY.',1,4
- DC.B 'SYS 64738',1,7
- dc.b 0
-
- even
-
- chrset:
-
- incbin 'df2:graphics/64.chrset.raw'
-
- ;special chars
- ;1=RETURN
- ;2=WAIT
- ;3=FAST PRINT
- ;4=SLOW PRINT
- ;5=INVERSE PRINT
- ;6=STANDARD PRINT
- ;7=CLEAR SCRN
- ;8=WAIT (NO CURSOR)
- ;9=CHANGE SCREEN TO BLACK
- ;10=CHANGE SCREEN TO WHITE
- ;11=CHANGE SCREEN TO BLUE
- ;12=START TUNE 1
-
-
- bpinit: lea samples(pc),a0
- lea bpsong(pc),a1
- clr.b numtables
- cmpi.w #'V.',26(a1)
- bne.s bpnotv2
- cmpi.b #'2',28(a1)
- bne.s bpnotv2
- move.b 29(a1),numtables
- bpnotv2: move.l #512,d0
- move.w 30(a1),d1 ;d1 now contains length in steps
- moveq.l #1,d2 ;1 is highest pattern number
- mulu #4,d1 ;4 voices per step
- subq.w #1,d1 ;correction for DBRA
- findhighest: cmp.w (a1,d0),d2 ;Is it higher
- bge.s nothigher ;No
- move.w (a1,d0),d2 ;Yes, so let D2 be highest
- nothigher: addq.l #4,d0 ;Next Voice
- dbra d1,findhighest ;And search
- move.w 30(a1),d1
- mulu #16,d1 ;16 bytes per step
- move.l #512,d0 ;header is 512 bytes
- mulu #48,d2 ;48 bytes per pattern
- add.l d2,d0
- add.l d1,d0 ;offset for samples
- add.l #bpsong,d0
- move.l d0,tables
- moveq.l #0,d1
- move.b numtables,d1 ;Number of tables
- lsl.l #6,d1 ;x 64
- add.l d1,d0
- move.l #14,d1 ;15 samples
- add.l #32,a1
- initloop: move.l d0,(a0)+
- cmpi.b #$ff,(a1)
- beq.s bpissynth
- move.w 24(a1),d2
- mulu #2,d2 ;Length is in words
- add.l d2,d0 ;offset next sample
- bpissynth: add.l #32,a1 ;Length of Sample Part in header
- dbra d1,initloop
- rts
- bpmusic: bsr bpsynth
- subq.b #1,arpcount
- moveq.l #3,d0
- lea bpcurrent(pc),a0
- move.l #$dff0a0,a1
- bploop1: move.b 12(a0),d4
- ext.w d4
- add.w d4,(a0)
- tst.b $1e(a0)
- bne.s bplfo
- move.w (a0),6(a1)
- bplfo: move.l 4(a0),(a1)
- move.w 8(a0),4(a1)
- tst.b 11(a0)
- bne.s bpdoarp
- tst.b 13(a0)
- beq.s not2
- bpdoarp: tst.b arpcount
- bne.s not0
- move.b 11(a0),d3
- move.b 13(a0),d4
- and.w #240,d4
- and.w #240,d3
- lsr.w #4,d3
- lsr.w #4,d4
- add.w d3,d4
- add.b 10(a0),d4
- bsr bpplayarp
- bra.s not2
- not0: cmpi.b #1,arpcount
- bne.s not1
- move.b 11(a0),d3
- move.b 13(a0),d4
- and.w #15,d3
- and.w #15,d4
- add.w d3,d4
- add.b 10(a0),d4
- bsr bpplayarp
- bra.s not2
- not1: move.b 10(a0),d4
- bsr bpplayarp
- not2: lea $10(a1),a1
- lea $20(a0),a0
- dbra d0,bploop1
- tst.b arpcount
- bne.s arpnotzero
- move.b #3,arpcount
- arpnotzero: subq.b #1,bpcount
- beq.s bpskip1
- rts
- bpskip1: move.b bpdelay,bpcount
- bpplay: bsr.s bpnext
- move.w dma,$dff096
- ;move.l #$1f4,d0 ;is this a waste ?????
- bpxx: ;dbra d0,bpxx
- moveq.l #3,d0
- move.l #$dff0a0,a1
- moveq.w #1,d1
- lea bpcurrent(pc),a2
- lea bpbuffer(pc),a5
- bploop2: btst #15,(a2)
- beq.s bpskip7
- bsr bpplayit
- bpskip7: asl.w #1,d1
- lea $10(a1),a1
- lea $20(a2),a2
- lea $24(a5),a5
- dbra d0,bploop2
- rts
- bpnext: clr.w dma
- lea bpsong(pc),a0
- move.l #$dff0a0,a3
- moveq.l #3,d0
- moveq.w #1,d7
- lea bpcurrent(pc),a1
- bploop3: moveq.l #0,d1
- move.w bpstep,d1
- lsl.w #4,d1
- move.l d0,d2
- lsl.l #2,d2
- add.l d2,d1
- add.l #512,d1
- move.w (a0,d1),d2
- move.b 2(a0,d1),st
- move.b 3(a0,d1),tr
- subq.w #1,d2
- mulu #48,d2
- moveq.l #0,d3
- move.w 30(a0),d3
- lsl.w #4,d3
- add.l d2,d3
- move.l #$00000200,d4
- move.b bppatcount,d4
- add.l d3,d4
- move.l d4,a2
- add.l a0,a2
- moveq.l #0,d3
- move.b (a2),d3
- tst.b d3
- bne.s bpskip4
- bra bpoptionals
- bpskip4: clr.w 12(a1) ;Clear autoslide/autoarpeggio
- move.b 1(a2),d4
- and.b #15,d4
- cmpi.b #10,d4 ;Option 10->transposes off
- bne.s bp_do1
- move.b 2(a2),d4
- and.b #240,d4 ;Higher nibble=transpose
- bne.s bp_not1
- bp_do1: add.b tr,d3
- ext.w d3
- bp_not1: move.b d3,10(a1) ; Voor Arpeggio's
- lea bpper(pc),a4
- lsl.w #1,d3
- move.w -2(a4,d3.w),(a1)
- bset #15,(a1)
- move.b #$ff,2(a1)
- moveq.w #0,d3
- move.b 1(a2),d3
- lsr.b #4,d3
- and.b #15,d3
- tst.b d3
- bne.s bpskip5
- move.b 3(a1),d3
- bpskip5: move.b 1(a2),d4
- and.b #15,d4
- cmpi.b #10,d4 ;option 10
- bne.s bp_do2
- move.b 2(a2),d4
- and.b #15,d4
- bne.s bp_not2
- bp_do2: add.b st,d3
- bp_not2: cmpi.w #1,8(a1)
- beq.s bpsamplechange
- cmp.b 3(a1),d3
- beq.s bpoptionals
- bpsamplechange: move.b d3,3(a1)
- or.w d7,dma
- bpoptionals: moveq.l #0,d3
- moveq.l #0,d4
- move.b 1(a2),d3
- and.b #15,d3
- move.b 2(a2),d4
- cmpi.b #0,d3 ; Optionals Here
- bne.s notopt0
- move.b d4,11(a1)
- notopt0: cmpi.b #1,d3
- bne.s bpskip3
- move.w d4,8(a3)
- move.b d4,2(a1) ; Volume ook in BPCurrent
- bpskip3: cmpi.b #2,d3 ; Set Speed
- bne.s bpskip9
- move.b d4,bpcount
- move.b d4,bpdelay
- bpskip9: cmpi.b #3,d3 ; Filter = LED control
- bne.s bpskipa
- tst.b d4
- bne.s bpskipb
- bset #1,$bfe001
- bra.s bpskip2
- bpskipb: bclr #1,$bfe001
- bpskipa: cmpi.b #4,d3 ; PortUp
- bne.s noportup
- sub.w d4,(a1) ; Slide data in BPCurrent
- clr.b 11(a1) ; Arpeggio's uit
- noportup: cmpi.b #5,d3 ; PortDown
- bne.s noportdn
- add.w d4,(a1) ; Slide down
- clr.b 11(a1)
- noportdn: cmpi.b #6,d3 ; SetRepCount
- bne.s notopt6
- move.b d4,bprepcount
- notopt6: cmpi.b #7,d3 ; DBRA repcount
- bne.s notopt7
- subq.b #1,bprepcount
- beq.s notopt7
- move.w d4,bpstep
- notopt7: cmpi.b #8,d3 ;Set AutoSlide
- bne.s notopt8
- move.b d4,12(a1)
- notopt8: cmpi.b #9,d3 ;Set AutoArpeggio
- bne.s notopt9
- move.b d4,13(a1)
- notopt9:
- bpskip2: lea $10(a3),a3
- lea $20(a1),a1
- asl.w #1,d7
- dbra d0,bploop3
- addq.b #3,bppatcount
- cmpi.b #48,bppatcount
- bne.s bpskip8
- move.b #0,bppatcount
- addq.w #1,bpstep
- lea bpsong(pc),a0
- move.w 30(a0),d1
- cmp.w bpstep,d1
- bne.s bpskip8
- move.w #0,bpstep
- bpskip8: rts
- bpplayit: bclr #15,(a2)
- tst.l (a5) ;Was EG used
- beq.s noeg1 ;No ??
- moveq.w #0,d3 ;Well then copy
- move.l (a5),a4 ;Old waveform back
- moveq #7,d7 ;to waveform tables
- eg1loop: move.l 4(a5,d3.w),(a4)+ ;Copy...
- addq.w #4,d3 ;Copy...
- dbra d7,eg1loop ;Copy...
- noeg1: move.w (a2),6(a1) ;Period from bpcurrent
- moveq.l #0,d7
- move.b 3(a2),d7 ;Instrument number
- move.l d7,d6 ;Also in d6
- lsl.l #5,d7 ;Header offset
- lea bpsong(pc),a3
- cmpi.b #$ff,(a3,d7.w) ;Is synthetic
- beq.s bpplaysynthetic ;Yes ??
- clr.l (a5) ;EG Off
- clr.b $1a(a2) ;Synthetic mode off
- clr.w $1e(a2) ;Lfo Off
- add.l #24,d7 ;24 is name->ignore
- lsl.l #2,d6 ;x4 for sample offset
- move.l #samples,a4
- move.l -4(a4,d6),d4 ;Fetch sample pointer
- beq.s bp_nosamp ;is zero->no sample
- move.l d4,(a1) ;Sample pointer in hardware
- move.w (a3,d7),4(a1) ;length in hardware
- move.b 2(a2),9(a1) ;and volume from bpcurrent
- cmpi.b #$ff,2(a2) ;Use default volume
- bne.s skipxx ;No ??
- move.w 6(a3,d7),8(a1) ;Default volume in hardware
- skipxx: move.w 4(a3,d7),8(a2) ;Length in bpcurrent
- moveq.l #0,d6
- move.w 2(a3,d7),d6 ;Calculate repeat
- add.l d6,d4
- move.l d4,4(a2) ;sample start in bpcurrent
- cmpi.w #1,8(a2) ;has sample repeat part
- bne.s bpskip6 ;Yes ??
- bp_nosamp: move.l #null,4(a2) ;Play no sample
- bra.s bpskip10
- bpskip6: move.w 8(a2),4(a1) ;Length to hardware
- move.l 4(a2),(a1) ;pointer to hardware
- bpskip10: or.w #$8000,d1 ;Turn on DMA for this voice
- move.w d1,$dff096 ;Yeah, do it
- rts
- bpplaysynthetic:move.b #$1,$1a(a2) ;Synthetic mode on
- clr.w $e(a2) ;EG Pointer restart
- clr.w $10(a2) ;LFO Pointer restart
- clr.w $12(a2) ;ADSR Pointer restart
- move.w 22(a3,d7.w),$14(a2) ;EG Delay
- addq.w #1,$14(a2) ;0 is nodelay
- move.w 14(a3,d7.w),$16(a2) ;LFO Delay
- addq.w #1,$16(a2) ;So I need correction
- move.w #1,$18(a2) ;ADSR Delay->Start immediate
- move.b 17(a3,d7.w),$1d(a2) ;EG OOC
- move.b 9(a3,d7.w),$1e(a2) ;LFO OOC
- move.b 4(a3,d7.w),$1f(a2) ;ADSR OOC
- move.b 19(a3,d7.w),$1c(a2) ;Current EG Value
- move.l tables,a4 ; so far so good,now what ??
- moveq.l #0,d3 ;Pointer to waveform tables
- move.b 1(a3,d7.w),d3 ;Which waveform
- lsl.l #6,d3 ;x64 is length waveform table
- add.l d3,a4
- move.l a4,(a1) ;Sample Pointer
- move.l a4,4(a2) ;In bpcurrent
- move.w 2(a3,d7.w),4(a1) ;Length in words
- move.w 2(a3,d7.w),8(a2) ;Length in bpcurrent
- tst.b 4(a3,d7.w) ;Is ADSR on
- beq.s bpadsroff ;No ??
- move.l tables,a4 ;Tables
- moveq.l #0,d3
- move.b 5(a3,d7.w),d3 ;ADSR table number
- lsl.l #6,d3 ;x64 for length
- add.l d3,a4 ;Add it
- moveq.w #0,d3
- move.b (a4),d3 ;Get table value
- add.b #128,d3 ;I want it from 0..255
- lsr.w #2,d3 ;Divide by 4->0..63
- cmpi.b #$ff,2(a2)
- bne.s bpskip99
- move.b 25(a3,d7.w),2(a2)
- bpskip99: moveq.w #0,d4
- move.b 2(a2),d4 ;Default volume
- mulu d4,d3 ;default maal init volume
- lsr.w #6,d3 ;divide by 64
- move.w d3,8(a1) ;is new volume
- bra.s bpflipper
- bpadsroff: move.b 2(a2),9(a1)
- cmpi.b #$ff,2(a2)
- bne.s bpflipper ;No ADSR
- move.b 25(a3,d7.w),9(a1) ;So use default volume
- bpflipper: move.l 4(a2),a4 ;Pointer on waveform
- move.l a4,(a5) ;Save it
- moveq.w #0,d3 ;Save Old waveform
- moveq #7,d4 ;data in bpbuffer
- eg2loop: move.l (a4,d3.w),4(a5,d3.w)
- addq.w #4,d3 ;Copy
- dbra d4,eg2loop
- tst.b 17(a3,d7.w) ;EG off
- beq bpskip10 ;Yes ??
- tst.b 19(a3,d7.w) ;Is there an init value for EG
- beq bpskip10 ;No ??
- moveq.l #0,d3
- move.b 19(a3,d7.w),d3
- lsr.l #3,d3 ;Divide by 8 ->0..31
- move.b d3,$1c(a2) ;Current EG Value
- subq.l #1,d3 ;-1,DBRA correction
- eg3loop: neg.b (a4)+
- dbra d3,eg3loop
- bra bpskip10
- bpplayarp: lea bpper(pc),a4
- ext.w d4
- asl.w #1,d4
- move.w -2(a4,d4.w),6(a1)
- rts
- bpsynth: move.l #3,d0
- lea bpcurrent(pc),a2
- lea $dff0a0,a1
- lea bpsong(pc),a3
- lea bpbuffer(pc),a5
- bpsynthloop: tst.b $1a(a2) ;Is synthetic sound
- beq.s bpnosynth ;No ??
- bsr.s bpyessynth ;Yes
- bpnosynth: lea $24(a5),a5
- lea $20(a2),a2
- lea $10(a1),a1
- dbra d0,bpsynthloop
- rts
- bpyessynth: moveq.w #0,d7
- move.b 3(a2),d7 ;Which instr. was I playing
- lsl.w #5,d7 ;x32, is length of instr.
- tst.b $1f(a2) ;ADSR off
- beq.s bpendadsr ;Yes ??
- subq.w #1,$18(a2) ;Delay,May I
- bne.s bpendadsr ;No ??
- moveq.l #0,d3
- move.b 8(a3,d7.w),d3
- move.w d3,$18(a2) ;Reset Delay Counter
- move.l tables,a4
- move.b 5(a3,d7.w),d3 ;Which ADSR table
- lsl.l #6,d3 ;x64
- add.l d3,a4 ;This is my table
- move.w $12(a2),d3 ;Get ADSR table pointer
- moveq.w #0,d4
- move.b (a4,d3.w),d4 ;Value from table
- add.b #128,d4 ;Want it from 0..255
- lsr.w #2,d4 ;And now from 0..63
- moveq.w #0,d3
- move.b 2(a2),d3 ;Current Volume
- mulu d3,d4 ;MultiPly with table volume
- lsr.w #6,d4 ;Divide by 64=New volume
- move.w d4,8(a1) ;Volume in hardware
- addq.w #1,$12(a2) ;Increment of ADSR pointer
- move.w 6(a3,d7.w),d4 ;Length of adsr table
- cmp.w $12(a2),d4 ;End of table reached
- bne.s bpendadsr ;No ??
- clr.w $12(a2) ;Clear ADSR Pointer
- cmpi.b #1,$1f(a2) ;Once
- bne.s bpendadsr ;No ??
- clr.b $1f(a2) ;ADSR off
- bpendadsr: tst.b $1e(a2) ;LFO On
- beq.s bpendlfo ;No ??
- subq.w #1,$16(a2) ;LFO delay,May I
- bne.s bpendlfo ;No
- moveq.l #0,d3
- move.b 16(a3,d7.w),d3
- move.w d3,$16(a2) ;Set LFO Count
- move.l tables,a4
- move.b 10(a3,d7.w),d3 ;Which LFO table
- lsl.l #6,d3 ;x64
- add.l d3,a4
- move.w $10(a2),d3 ;LFO pointer
- moveq.l #0,d4
- move.b (a4,d3.w),d4 ;That's my value
- ext.w d4 ;Make it a word
- ext.l d4 ;And a longword
- moveq.l #0,d5
- move.b 11(a3,d7.w),d5 ;LFO depth
- tst.b d5
- beq.s bpnotx
- divs d5,d4 ;Calculate it
- bpnotx: move.w (a2),d5 ;Period
- add.w d4,d5 ;New Period
- move.w d5,6(a1) ;In hardware
- addq.w #1,$10(a2) ;Next position
- move.w 12(a3,d7.w),d3 ;LFO table Length
- cmp.w $10(a2),d3 ;End Reached
- bne.s bpendlfo ;NO ??
- clr.w $10(a2) ;Reset LFO Pointer
- cmpi.b #1,$1e(a2) ;Once LFO
- bne.s bpendlfo ;NO ??
- clr.b $1e(a2) ;LFO Off
- bpendlfo: tst.b $1d(a2) ;EG On
- beq bpendeg ;No ??
- subq.w #1,$14(a2) ;EG delay,May I
- bne bpendeg ;No
- tst.l (a5)
- beq.s bpendeg
- moveq.l #0,d3
- move.b 24(a3,d7.w),d3
- move.w d3,$14(a2) ;Set EG Count
- move.l tables,a4
- move.b 18(a3,d7.w),d3 ;Which EG table
- lsl.l #6,d3 ;x64
- add.l d3,a4
- move.w $e(a2),d3 ;EG pointer
- moveq.l #0,d4
- move.b (a4,d3.w),d4 ;That's my value
- move.l (a5),a4 ;Pointer to waveform
- add.b #128,d4 ;0..255
- lsr.l #3,d4 ;0..31
- moveq.l #0,d3
- move.b $1c(a2),d3 ;Old EG Value
- move.b d4,$1c(a2)
- add.l d3,a4 ;WaveForm Position
- move.l a5,a6 ;Buffer
- add.l d3,a6 ;Position
- addq.l #4,a6 ;For adress in buffer
- cmp.b d3,d4 ;Compare old with new value
- beq.s bpnexteg ;no change ??
- bgt bpishigh ;new value is higher
- bpislow: sub.l d4,d3 ;oldvalue-newvalue
- subq.l #1,d3 ;Correction for DBRA
- bpegloop1a: move.b -(a6),d4
- move.b d4,-(a4)
- dbra d3,bpegloop1a
- bra.s bpnexteg
- bpishigh: sub.l d3,d4 ;Newvalue-oldvalue
- subq.l #1,d4 ;Correction for DBRA
- bpegloop1b: move.b (a6)+,d3
- neg.b d3
- move.b d3,(a4)+ ;DoIt
- dbra d4,bpegloop1b
- bpnexteg: addq.w #1,$e(a2) ;Next position
- move.w 20(a3,d7.w),d3 ;EG table Length
- cmp.w $e(a2),d3 ;End Reached
- bne.s bpendeg ;NO ??
- clr.w $e(a2) ;Reset EG Pointer
- cmpi.b #1,$1d(a2) ;Once EG
- bne.s bpendeg ;NO ??
- clr.b $1d(a2) ;EG Off
- bpendeg: rts
-
- null: dc.w 0
- bpcurrent: dc.w 0,0 ;periode,instrument =(volume.b,instr nr.b)
- dc.l null ;start
- dc.w 1 ;length (words)
- dc.b 0,0,0,0 ;noot,arpeggio,autoslide,autoarpeggio
- dc.w 0,0,0 ;EG,LFO,ADSR pointers
- dc.w 0,0,0 ;EG,LFO,ADSR count
- dc.b 0,0 ;Synthetic yes/no, Volume Slide
- dc.b 0,0 ;Current EG value,EG OOC
- dc.b 0,0 ;LFO OOC,ADSR OOC
-
- dc.w 0,0
- dc.l null
- dc.w 1,0,0
- dc.w 0,0,0,0,0,0,0,0,0
-
- dc.w 0,0
- dc.l null
- dc.w 1,0,0
- dc.w 0,0,0,0,0,0,0,0,0
-
- dc.w 0,0
- dc.l null
- dc.w 1,0,0
- dc.w 0,0,0,0,0,0,0,0,0
-
- bpstep: dc.w 0
- bppatcount: dc.b 0
- st: dc.b 0
- tr: dc.b 0
- bpcount: dc.b 1
- bpdelay: dc.b 6
- arpcount: dc.b 1
- bprepcount: dc.b 1
- numtables: dc.b 0
-
- even
-
- dma: dc.w 0
- tables: dc.l 0
-
- bpbuffer: dcb.b 144,0
- dc.w 6848,6464,6080,5760,5440,5120,4832,4576,4320,4064,3840,3616
- dc.w 3424,3232,3040,2880,2720,2560,2416,2288,2160,2032,1920,1808
- dc.w 1712,1616,1520,1440,1360,1280,1208,1144,1080,1016,0960,0904
-
- bpper: dc.w 0856,0808,0760,0720,0680,0640,0604,0572,0540,0508,0480,0452
- dc.w 0428,0404,0380,0360,0340,0320,0302,0286,0270,0254,0240,0226
- dc.w 0214,0202,0190,0180,0170,0160,0151,0143,0135,0127,0120,0113
- dc.w 0107,0101,0095,0090,0085,0080,0076,0072,0068,0064,0060,0057
-
- samples: dcb.l 15,0
-
- bpsong: incbin "df2:modules/bp.commandohi"
-
-
-
-